2. Deactivate Component 중복 호출에서 발생한 버그

그림에서 알 수 있듯, ActorComponent의 OnDeactivate()가 두번 호출되면서, 틱 그룹에서 컴포넌트를 제거하는데 실패해서 크래시가 발생함.

void WWorld::DequeueComponentTick(WActorComponent* ActorComp)
{
	if (!ActorComp || ActorComp->mTickGroup == ETickGroup::ETG_None || ActorComp->mTickQueueId < 0)
	{
		return;
	}

	int i = ActorComp->mTickQueueId;
	ActorComp->mTickQueueId = -1;
	std::vector<WActorComponent*>& TickGroup = mActorComponentTickGroups[ActorComp->mTickGroup];
	if (i < TickGroup.size() - 1)
	{
		TickGroup[i] = std::move(TickGroup.back());
		TickGroup[i]->mTickQueueId = i;
	}
	
	TickGroup.pop_back();
}

문제의 코드인데, 주석을 달아놓은 것 처럼 위 if문에서 mTickQueueId를 비교하지만, 정작 제거할때 Id를 변경하는 것을 깜박해서 두번째 제거시도에서 OutOfBound 버그가 발생한 것이였음. 해당 라인을 추가해 주니 정상적으로 작동함.